<?php

class WxPayNotifyCallBack extends WxPayNotify {

    //查询订单
    public function Queryorder($transaction_id) {

        $input = new \WxPayOrderQuery();
        $input->SetTransaction_id($transaction_id);
        $result = \WxPayApi::orderQuery($input);

        if(array_key_exists("return_code", $result)
            && array_key_exists("result_code", $result)
            && $result["return_code"] == "SUCCESS"
            && $result["result_code"] == "SUCCESS") {
            return true;
        }
        return false;

    }

    //重写回调处理函数
    public function NotifyProcess($data, &$msg) {

        if(!array_key_exists("transaction_id", $data)){
            $msg = "输入参数不正确";
            return false;
        }
        // 查询微信订单，判断订单真实性
        if(!$this->Queryorder($data["transaction_id"])){
            $msg = "订单查询失败";
            return false;
        }
        if($order = \C\mod\order::get(['order_id' => $data['out_trade_no']])) {
            if($order->state == '1') {
                $order->set([
                    'state_pay' => '1',
                    'trade_no' => $data['transaction_id'],
                    'time_pay' => $_SERVER['REQUEST_TIME']
                ]);
                $order->update();
                $sql = new \C\lib\Sql();
                $sql->update('order_piece', [
                    'state_pay' => '1',
                    'state' => '0',
                    'state_in' => '0'
                ])->where([
                    'order_id' => $order->order_id
                ]);
                \C\lib\Db::query($sql->sql);
            }
        } else {
            $msg = '订单不在数据库';
            return false;
        }
        return true;

    }

}

